package com.leeon.container;

import java.util.LinkedHashMap;
import java.util.Map;

import org.omg.CORBA.PUBLIC_MEMBER;

import net.mindview.util.Generator;
import net.mindview.util.Pair;

public class MapData<K,V> extends LinkedHashMap<K, V> {
	
	public MapData(Generator<Pair<K, V>> gen,int quantity){
		for(int i = 0; i < quantity; i++){
			Pair<K, V> p = gen.next();
			put(p.key, p.value);
		}
	}
	
	public MapData(Generator<K> genK,Generator<V> genV,int quatity){
		for(int i = 0; i < quatity; i++){
			put(genK.next(), genV.next());
		}
	}
	
	public MapData(Generator<K> genK,V value,int quantity){
		for(int i = 0; i < quantity; i++){
			put(genK.next(),value);
		}
	}
	
	public MapData(Iterable<K> genK,Generator<V> value){
		for(K key : genK){
			put(key, value.next());
		}
	}
	
	public MapData(Iterable<K> genK,V value){
		for(K key : genK){
			put(key, value);
		}
	}
	
	public static <K,V> MapData<K, V> map(Generator<Pair<K, V>> gen,int quantity){
		return new MapData<>(gen, quantity);
	}
	
	public static <K,V> MapData<K, V> map(Generator<K> genK,Generator<V> genV,int quantity){
		return new MapData<>(genK, genV, quantity);
	}
	
	public static <K,V> MapData<K, V> map(Generator<K> genK,V value,int quantity){
		return new MapData<>(genK, value, quantity);
	}
	
	public static <K,V> MapData<K, V> map(Iterable<K> genK,Generator<V> value){
		return new MapData<>(genK, value);
	}
	
	public static <K,V> MapData<K, V> map(Iterable<K> genK,V value){
		return new MapData<>(genK, value);
	}
}
